package com.majun.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

/**
 * @author mj
 * @2025/2/10 1:41
 */
public class gittest {
    public static void main(String[] args) {

            // 指定 Git 仓库目录
            String gitRepoPath = "F:/majungitdiff/majun2024";

            // 构建 git log 命令，使用 -C 选项指定仓库目录，并格式化输出
            List<String> command = new ArrayList<>();
            command.add("git");
            command.add("-C");
            command.add(gitRepoPath);
            command.add("log");
            command.add("--pretty=format:%H %ct"); // 输出 commit ID 和 Unix 时间戳（秒）

            try {
                // 执行命令并获取输出
                ProcessBuilder processBuilder = new ProcessBuilder(command);
                Process process = processBuilder.start();
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                String line;
                while ((line = reader.readLine()) != null) {
                    // 解析输出
                    String[] parts = line.trim().split(" ");
                    if (parts.length == 2) {
                        String commitId = parts[0];
                        long timestamp = Long.parseLong(parts[1]);

                        // 将 Unix 时间戳转换为 LocalDateTime
                        // 注意：这里我们假设仓库的时区与系统的默认时区一致
                        // 如果需要特定时区，可以替换 ZoneId.systemDefault() 为其他时区，如 ZoneId.of("UTC")
                        Instant instant = Instant.ofEpochSecond(timestamp);
                        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

                        // 打印结果
                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                        System.out.println("Commit ID: " + commitId + ", Date: " + dateTime.format(formatter));
                    }
                }

                // 等待进程完成
                int exitCode = process.waitFor();
                if (exitCode != 0) {
                    System.err.println("Git log command failed with exit code: " + exitCode);
                }

            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

